import router from '@/router'
import { useLoginUserStore } from '@/stores/useLoginUserStores.ts'
import { message } from 'ant-design-vue'

// 是否为首次获取登录用户
let firstFetchLoginUser: boolean = true

/**
 * 全局权限校验，每次切换页面都会执行
 */
router.beforeEach(async (to, from, next) => {
  const loginUserStore = useLoginUserStore()
  let loginUser = loginUserStore.loginUser
  // 确保页面刷新、首次加载时（切换页面不需要重复获取，用 firstFetchLoginUser 判断），能等待后端返回用户信息状态后再校验权限
  if (firstFetchLoginUser) {
    // await 后端获取用户信息状态
    await loginUserStore.fetchLoginUser()
    // 赋值
    loginUser = loginUserStore.loginUser
    firstFetchLoginUser = false
  }
  const toUrl = to.fullPath
  // 可以自己定义权限校验规则，比如管理员才能访问 /admin 页面
  if (toUrl.startsWith('/admin')) {
    if (!loginUser || loginUser.userRole !== 'admin') {
      message.error('无权限，请登录后重试')
      next(`/user/login?redirect=${to.fullPath}`)
      return
    }
  }
  // 放行
  next()
})
